package part19;

import java.util.EnumSet;

/**
 * @author wcj
 * @Date 2021/6/5 19:42
 * @Version 1.0
 */
public class Part198 {

    /**
     * EnumSet替代标志位：EnumSet底层使用一个64位的long，而一个EnumSet的实例为一个bit位，EnumSet底层实现可以动态扩展，需要的时候增加一个long
     * Enum本身实际上就是一个不允许有重复的实例，只不过我们不能按照容器的方式对其进行操作，这里提供EnumSet相当于提供了一个对于Enum操作的容器类
     *
     * @param args
     */
    public static void main(String[] args) {
        EnumSet<AlarmPoints> set = EnumSet.noneOf(AlarmPoints.class);
        set.add(AlarmPoints.BATHROOM);
        System.out.println(set);
        set.addAll(EnumSet.of(AlarmPoints.STAIR1, AlarmPoints.STAIR2, AlarmPoints.KITCHEN));
        System.out.println(set);
        set = EnumSet.allOf(AlarmPoints.class);
        set.removeAll(EnumSet.of(AlarmPoints.STAIR1, AlarmPoints.STAIR2, AlarmPoints.KITCHEN));
        System.out.println(set);
        set.removeAll(EnumSet.range(AlarmPoints.OFFICE1, AlarmPoints.OFFICE2));
        System.out.println(set);
        set = EnumSet.complementOf(set);
        System.out.println(set);
    }
}

enum AlarmPoints {
    STAIR1,
    STAIR2,
    LOBBY,
    OFFICE1,
    OFFICE2,
    OFFICE3,
    OFFICE4,
    BATHROOM,
    UTILITY,
    KITCHEN,
}
